#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<functional>
#include"Sem.hpp"
#include"RingQueue.hpp"

void *consumer(void* args)
{
    RingQueue<int>* rq = static_cast<RingQueue<int>*>(args);
    while(true)
    {
        //sleep(3);
        //int data = bq->Pop();
        int t = 0;
        rq->Pop(&t);
        std::cout<<"消费者拿到了一个数据"<<t<<std::endl;
    }
}
void *productor(void* args)
{
    RingQueue<int>* rq = static_cast<RingQueue<int>*>(args);
    int data = 1;

    while (true)
    {
        //sleep(1);
        std::cout<<"生产了一个任务:"<<data<<std::endl;
        //Task t(x,y);
        rq->Equeue(data++);
    }
    
}

int main()
{
    //申请环队列
    RingQueue<int>* rq = new RingQueue<int>();

    //线程构建生产者和消费者
    pthread_t c[2],p[3];
    pthread_create(c,nullptr,consumer,rq);
    pthread_create(c+1,nullptr,consumer,rq);
    pthread_create(p,nullptr,productor,rq);
    pthread_create(p+1,nullptr,productor,rq);
    pthread_create(p+2,nullptr,productor,rq);

    pthread_join(c[0],nullptr);
    pthread_join(c[1],nullptr);
    pthread_join(p[0],nullptr);
    pthread_join(p[1],nullptr);
    pthread_join(p[2],nullptr);


    return 0;
}